package com.clkj.cldisabledmanclient.mvp.main;

import android.Manifest;
import android.os.Bundle;
import android.provider.SyncStateContract;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.clkj.cldisabledmanclient.R;
import com.clkj.cldisabledmanclient.adapter.vp.HomeViewPagerAdapter;
import com.clkj.cldisabledmanclient.base.BaseActivity;
import com.clkj.cldisabledmanclient.bean.VersionInfoBean;
import com.clkj.cldisabledmanclient.constant.Config;
import com.clkj.cldisabledmanclient.http.HttpConfig;
import com.clkj.cldisabledmanclient.http.OkGoUpdateHttpUtil;
import com.clkj.cldisabledmanclient.mvp.main.index.FragmentIndex;
import com.clkj.cldisabledmanclient.mvp.main.personalcenter.FragmentPersonalCenter;
import com.clkj.cldisabledmanclient.util.AppUtils;
import com.clkj.cldisabledmanclient.util.CProgressDialogUtils;
import com.clkj.cldisabledmanclient.util.CommonUtil;
import com.clkj.cldisabledmanclient.util.DesUtil;
import com.clkj.cldisabledmanclient.widget.NoScrollViewPager;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.mylhyl.acp.Acp;
import com.mylhyl.acp.AcpListener;
import com.mylhyl.acp.AcpOptions;
import com.vector.update_app.UpdateAppBean;
import com.vector.update_app.UpdateAppManager;
import com.vector.update_app.UpdateCallback;
import com.vector.update_app.listener.ExceptionHandler;
import com.vector.update_app.listener.IUpdateDialogFragmentListener;

import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by clboys on 2019/5/8.
 */

public class ActivityMain extends BaseActivity implements ViewPager.OnPageChangeListener, RadioGroup.OnCheckedChangeListener {

    private RadioGroup rgTab;
    private RadioButton rbIndex;
    private RadioButton rbMe;
    private NoScrollViewPager vp;

    private List<Fragment> mFragments;

    HomeViewPagerAdapter vpAdapter;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        assignView();
        initView();

        //授权
        Acp.getInstance(this).request(new AcpOptions.Builder()
                        .setPermissions(
                                Manifest.permission.WRITE_EXTERNAL_STORAGE,
                                Manifest.permission.INSTALL_PACKAGES
                        )
                        .build(),
                new AcpListener() {
                    @Override
                    public void onGranted() {
                        checkUpdate();
                    }

                    @Override
                    public void onDenied(List<String> permissions) {
                        //makeText(permissions.toString() + "权限拒绝");
                    }
                });
    }

    @Override
    public void initData() {

    }


    void checkUpdate() {


        Map<String, String> params = new HashMap<String, String>();

        /*params.put("appKey", "ab55ce55Ac4bcP408cPb8c1Aaeac179c5f6f");
        params.put("appVersion", AppUpdateUtils.getVersionName(this));*/
        params.put("versionType", "残疾");
        new UpdateAppManager
                .Builder()
                //必须设置，当前Activity
                .setActivity(this)
                //必须设置，实现httpManager接口的对象
                .setHttpManager(new OkGoUpdateHttpUtil())
                //必须设置，更新地址
                .setUpdateUrl(HttpConfig.URL_OF_INTERFACE_BASE + "CDPFIN/getLatestAPP")
                //全局异常捕获
                .handleException(new ExceptionHandler() {
                    @Override
                    public void onException(Exception e) {
                        e.printStackTrace();
                    }
                })
                //以下设置，都是可选
                //设置请求方式，默认get
                .setPost(true)
                //不显示通知栏进度条
//                .dismissNotificationProgress()
                //是否忽略版本
//                .showIgnoreVersion()
                //添加自定义参数，默认version=1.0.0（app的versionName）；apkKey=唯一表示（在AndroidManifest.xml配置）
                .setParams(params)
                //设置点击升级后，消失对话框，默认点击升级后，对话框显示下载进度，如果是强制更新，则设置无效
//                .hideDialogOnDownloading()
                //设置头部，不设置显示默认的图片，设置图片后自动识别主色调，然后为按钮，进度条设置颜色
                //.setTopPic(R.mipmap.top_8)
                //为按钮，进度条设置颜色。
                .setThemeColor(0xffffac5d)
                //设置apk下载路径，默认是在下载到sd卡下/Download/1.0.0/test.apk
//                .setTargetPath(path)
                //设置appKey，默认从AndroidManifest.xml获取，如果，使用自定义参数，则此项无效
//                .setAppKey("ab55ce55Ac4bcP408cPb8c1Aaeac179c5f6f")
                .setUpdateDialogFragmentListener(new IUpdateDialogFragmentListener() {
                    @Override
                    public void onUpdateNotifyDialogCancel(UpdateAppBean updateApp) {
                        //用户点击关闭按钮，取消了更新，如果是下载完，用户取消了安装，则可以在 onActivityResult 监听到。

                    }
                })
                .dismissNotificationProgress()
                //不自动，获取
//                .setIgnoreDefParams(true)
                .build()
                //检测是否有新版本
                .checkNewApp(new UpdateCallback() {
                    /**
                     * 解析json,自定义协议
                     *
                     * @param json 服务器返回的json
                     * @return UpdateAppBean
                     */
                    @Override
                    protected UpdateAppBean parseJson(String json) {
                        UpdateAppBean updateAppBean = new UpdateAppBean();
                        Log.e("更新内容", json);
                        JsonObject responseResult = new JsonParser().parse(json).getAsJsonObject();

                        if (responseResult.get(Config.RESPONSE_KEY_CODE).getAsString().equals(Config.RESPONSE_STATUS_SUCCESS)) {
                            try {
                                String jsonStr = responseResult.get(SyncStateContract.Constants.DATA).getAsString();
                                String data = DesUtil.decryptDESCBC(jsonStr, DesUtil.KEY);
                                JsonObject jsonObject2 = new JsonParser().parse(data).getAsJsonObject();

                                VersionInfoBean versionInfo = (VersionInfoBean) CommonUtil.formatJsonToObjectWithNoKey(jsonObject2,
                                        new TypeToken<VersionInfoBean>() {
                                        });
                                int newVerCode = Integer.valueOf(versionInfo.getVersionCode());
                                int vercode = AppUtils.getVersionCode(ActivityMain.this);
                                String update = "No";
                                if (newVerCode > vercode) {
                                    update = "Yes";
                                }

                                String new_version ="canlian";
                                String apk_file_url = versionInfo.getVersionFile();
                                String update_log = versionInfo.getVersionMessage();

                                boolean constraint = true;


                                JSONObject jsonObject = new JSONObject(json);
                                updateAppBean
                                        //（必须）是否更新Yes,No
                                        .setUpdate(update)
                                        //（必须）新版本号，
                                        .setNewVersion(new_version)
                                        //（必须）下载地址
                                        .setApkFileUrl(apk_file_url)
                                        //（必须）更新内容
                                        .setUpdateLog(update_log)
                                        //大小，不设置不显示大小，可以不设置
                                        .setTargetSize("6M")
                                        //是否强制更新，可以不设置
                                        .setConstraint(constraint);
                                //设置md5，可以不设置
                                //.setNewMd5("");
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                        return updateAppBean;
                    }

                    @Override
                    protected void hasNewApp(UpdateAppBean updateApp, UpdateAppManager updateAppManager) {
                        updateAppManager.showDialogFragment();
                    }

                    /**
                     * 网络请求之前
                     */
                    @Override
                    public void onBefore() {
                        CProgressDialogUtils.showProgressDialog(ActivityMain.this);
                    }

                    /**
                     * 网路请求之后
                     */
                    @Override
                    public void onAfter() {
                        CProgressDialogUtils.cancelProgressDialog(ActivityMain.this);
                    }

                    /**
                     * 没有新版本
                     */
                    @Override
                    public void noNewApp(String error) {
                        //Toast.makeText(ActivityMain.this, "没有新版本", Toast.LENGTH_SHORT).show();
                    }
                });


    }

    @Override
    public void assignView() {

        rgTab = (RadioGroup) findViewById(R.id.rg_tab);
        rbIndex = (RadioButton) findViewById(R.id.rb_index);
        rbMe = (RadioButton) findViewById(R.id.rb_me);
        vp = (NoScrollViewPager) findViewById(R.id.vp);

    }

    @Override
    public void initView() {

        mFragments = new ArrayList<Fragment>();

        Fragment fragmentIndex = FragmentIndex.getInstance(null);
        Fragment fragmentPersonalCenter = FragmentPersonalCenter.getInstance(null);

        mFragments.add(fragmentIndex);
        mFragments.add(fragmentPersonalCenter);


        vpAdapter = new HomeViewPagerAdapter(getSupportFragmentManager(), mFragments);
        vp.setOffscreenPageLimit(2);
        vp.setAdapter(vpAdapter);
        vp.setCurrentItem(0);
        vp.addOnPageChangeListener(this);

        rgTab.setOnCheckedChangeListener(this);


    }

    @Override
    public void onPageScrolled(int i, float v, int i1) {

    }

    @Override
    public void onPageSelected(int i) {

        switch (i) {
            case 0:
                rbIndex.setChecked(true);
                break;
            case 1:
                rbMe.setChecked(true);
                break;


        }

    }

    @Override
    public void onPageScrollStateChanged(int i) {

    }

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {

        switch (checkedId) {
            case R.id.rb_index:

                vp.setCurrentItem(0, false);
                break;
            case R.id.rb_me:

                vp.setCurrentItem(1, false);
                break;

        }

    }

}
